/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.barbon.sudoku.model.servico;

import br.barbon.sudoku.model.entidade.Posicao;

/**
 *
 * @author Barbon
 */
public abstract class PosicaoService {
    
    public static boolean preDefinirPosicao(Posicao po, byte valor){
        
        if (!po.isPreDefinida()){
            po.setPreDefinida(true);
            po.setValor(valor);
            
            if (haveraConflitantes(po)){
                retirarPreDefinicao(po);
                
                return false;
            }
            return true;
        }
        
        return false;
    }
    
    public static void retirarPreDefinicao(Posicao po){
        po.setPreDefinida(false);
        po.setValor((byte) 0);
    }
    
    public static boolean haveraConflitantes(Posicao po){        
        
        if ( QuadradoService.haveraConflitoNoQuadrado(po)
          || LinhaService.haveraConflitoNaLinha(po)
          || ColunaService.haveraConflitoNaColuna(po)){
            
            return true;
        }
        
        return false;
    }
    
    public static void definirPosicao(Posicao po, byte valor){
        
        po.setValor(valor);
        
        QuadradoService.setConflitos(po);
        LinhaService.setConflitos(po);
        ColunaService.setConflitos(po);
        
    }
    
    public static void limparPosicao(Posicao po){
        
        po.setValor((byte)0);
        
        QuadradoService.limparConflitos(po);
        LinhaService.limparConflitos(po);
        ColunaService.limparConflitos(po);
        
    }
    
    public static boolean isPreDefinida(Posicao po){
        
        return po.isPreDefinida();
        
    }
    
    public static void setValor(Posicao po, byte valor){
        
        po.setValor(valor);
        
    }
    
    public static byte getValor(Posicao po){
        
        return po.getValor();
        
    }
}
